home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / database / graph_it / graph_pr.prg < prev    next >
Text File  |  1987-06-23  |  23KB  |  1,091 lines

  1.  
  2. ***********************************************
  3. * Filename: graph_pr.prg
  4. * Author  : Roger J. Donnay
  5. * Date    : June 23, 1987
  6. *
  7. * Notes   : The graphing procedures in this file may be called from
  8. *           the file GRAPH_IT.PRG or from your own programs.
  9. *           See file GRAPH_IT.PRG for documentation and calling
  10. *           parameters.
  11. *
  12. * Donnay Software Systems
  13. * 6151 Jasonwood Dr.
  14. * Huntington Beach, CA 92648
  15. * (714) 841-6260
  16. *
  17. * Check to see that you have the complete, unaltered source.  This file
  18. * is   1091  lines,  22476  characters
  19. ************************************************
  20.  
  21. ** Graph Parameters Maintenance Main Menu
  22. PROC grphmenu
  23.  
  24. PUBLIC CLIPPER
  25. PRIVATE colorp,ikey,code,lvalue
  26.  
  27. SELE I
  28. SET TALK OFF
  29. USE graph_it
  30. LOCA FOR .t.
  31. paint=.T.
  32. file_open=.f.
  33. lvalue=' '
  34. code=' '
  35. ikey=0
  36. mfilt_desc=' '
  37. DO WHILE .t.
  38.   SELE graph_it
  39.   SET DEVICE TO SCREEN
  40.   IF paint
  41.     DO grpaint
  42.   ENDIF
  43.   @ 14,21 GET grph_nmbr
  44.   @ 15,21 GET title
  45.   @ 16,21 GET file_name
  46.   @ 17,21 GET indx_name
  47.   @ 18,21 GET filt_desc
  48.   @ 20,4 SAY 'Data file is'
  49.   @ 20,17 SAY IIF(file_open,'OPEN  ','CLOSED')
  50.   CLEAR GETS
  51.   @ 22,0 CLEAR TO 23,79
  52.   IF BOF()
  53.     @ 22,40 SAY '** Top of file **'
  54.   ENDIF
  55.   IF EOF()
  56.     @ 22,40 SAY '** Bottom of file **'
  57.   ENDIF
  58.   IF DELETE()
  59.     @ 23,40 SAY '** Deleted **'
  60.   ENDIF
  61.   ikey=0
  62.   @ 23,2 SAY 'Enter Selection'
  63.   DO grtime
  64.   @ 23,18 SAY code
  65.   SET BELL ON
  66.   DO CASE
  67.     CASE (code='N' .OR. ikey=24) .AND. .NOT. EOF()
  68.       SKIP
  69.       SELE J
  70.       USE
  71.       file_open=.f.
  72.     CASE (code='P' .OR. ikey=5) .AND. .NOT. BOF()
  73.       SKIP -1
  74.       SELE J
  75.       USE
  76.       file_open=.f.
  77.     CASE code='T' .OR. ikey=1
  78.       GOTO TOP
  79.       SELE J
  80.       USE
  81.       file_open=.f.
  82.     CASE code='B' .OR. ikey=6
  83.       GOTO BOTT
  84.       SELE J
  85.       USE
  86.       file_open=.f.
  87.     CASE code='G' && Browse graph file
  88.       DO grbrow
  89.     CASE code='L' .OR. code='F' && Locate graph 
  90.       DO grlocate
  91.     CASE code='C' && Continue locate
  92.       CONT
  93.     CASE code='S' && Display structure of data file
  94.       DO grstru
  95.     CASE code='D' &&Delete/Undelete
  96.       IF DELETE()
  97.         RECALL
  98.       ELSE
  99.         DELETE
  100.       ENDIF
  101.     CASE code='A'&& Add new record to graph parameter file
  102.       DO gradd
  103.     CASE code='E' .OR. code='V' && Edit or View graph parameters
  104.       DO grscrn
  105.     CASE code='U'&& Pack graph file
  106.       DO grpack
  107.     CASE code='J' && Draw graph
  108.       DO grgraph
  109.     CASE code='O' && Print graph file
  110.       DO grprint
  111.     CASE code='Z' && Open/Close datafile 
  112.       DO grfopen
  113.     CASE code='Q' && Quit
  114.       CLEAR
  115.       SELE J
  116.       USE 
  117.       SELE I
  118.       USE 
  119.       RELE clipper
  120.       RETURN
  121.   ENDC
  122. ENDDO
  123.  
  124. * - Paint menu on screen
  125. PROC grpaint
  126.  
  127. paint=.f.
  128. CLEAR
  129. DO setcolor WITH 'BG'
  130. @ 1,1 TO 21,78 DOUBLE
  131. @ 3,2 TO 3,77
  132. @ 13,2 TO 13,77
  133. DO setcolor WITH 'G'
  134. @ 2,20 SAY '** BAR GRAPH FILE MAINTENANCE MENU **'
  135. @ 4,4  SAY 'E   Edit Parameters            L = Locate Record'
  136. @ 5,4  SAY 'N = Go to Next record          C = Continue Locate'
  137. @ 6,4  SAY 'P = Go to Previous record      V = View Parameters'
  138. @ 7,4  SAY 'B = Go to bottom of file       J = Draw graph'
  139. @ 8,4  SAY 'T = Go to top of file          G = Browse graph or data file'
  140. @ 9,4  SAY 'U = Pack file                  O = Output Graph list to printer'
  141. @ 10,4 SAY 'D = Delete/Undelete Record     A = Add new Record'
  142. @ 11,4 SAY 'S = Display DBF Structure      Z = Open/Close Data file'
  143. @ 12,4 SAY 'Q = QUIT'
  144. DO setcolor WITH 'GR'
  145. @ 14,4 SAY 'Graph Nmbr'
  146. @ 15,4 SAY 'Title'
  147. @ 16,4 SAY 'Data File Name'
  148. @ 17,4 SAY 'Index File Name'
  149. @ 18,4 SAY 'Filter'
  150. DO setcolor WITH 'W,N/W'
  151. RETURN
  152.  
  153. *(L)(F) Locate Parameter Record
  154. PROC grlocate
  155.  
  156. lvalue='                         '
  157. @ 22,1 SAY 'Enter FILE NAME, GRAPH NUMBER, or GRAPH DESCRIPTION to locate'
  158. @ 23,1 GET lvalue
  159. READ
  160. IF lvalue=' '
  161.   RETURN
  162. ENDIF
  163. lvalue=UPPER(TRIM(lvalue))
  164. LOCA FOR UPPER(file_name)=lvalue .OR. grph_nmbr=lvalue .OR. ;
  165.   AT(lvalue,UPPER(title))<>0
  166. RETURN
  167.  
  168. *S Display Data Base Structure
  169. PROC grstru
  170.  
  171. PRIVATE fc,l,field
  172.  
  173. SELE J
  174. IF .NOT. file_open
  175.   DO grfopen
  176. ENDIF
  177. IF .NOT. file_open
  178.   RETURN
  179. ENDIF
  180. paint=.T.
  181. CLEAR
  182. IF .NOT. CLIPPER
  183.   DISP STRU
  184. ELSE
  185.   fc=1
  186.   l=1
  187.   DO WHILE fc<=fcount()
  188.     @ l,1 say STR(fc,3,0)
  189.     @ l,5 SAY FIELDNAME(fc)
  190.     field=FIELDNAME(fc)
  191.     @ l,17 SAY TYPE('&field')
  192.     fc=fc+1
  193.     l=l+1
  194.     IF l>20
  195.       l=1
  196.       WAIT
  197.       CLEAR
  198.     ENDIF
  199.   ENDDO
  200. ENDIF
  201. WAIT
  202. RETURN
  203.  
  204. *(G) Browse Data Base file
  205. PROC grbrow
  206.  
  207. PRIVATE browcode
  208.  
  209. PAINT=.T.
  210. CLEAR
  211. DO SETCOLOR WITH 'BG'
  212. @ 1,1 TO 11,78
  213. DO SETCOLOR WITH 'G'
  214. @ 2,25 SAY '** BROWSE FILE **'
  215. @ 4,4 SAY 'G = Graph Parameter file'
  216. @ 5,4 SAY 'D = Data file'
  217. @ 7,4 SAY '<CR> =QUIT'
  218. browcode=' '
  219. DO setcolor WITH 'w'
  220. @ 10,4 SAY 'Enter Selection' GET browcode PICT '!'
  221. READ
  222. IF browcode=' '
  223.   RETURN
  224. ENDIF
  225. IF browcode='G'
  226.   SELE graph_it
  227.   DO browse
  228.   SELE J
  229.   USE
  230.   file_open=.f.
  231. ENDIF
  232. IF browcode='D'
  233.   mfilt_desc=filt_desc
  234.   SELE J
  235.   IF .NOT. file_open
  236.     DO grfopen
  237.   ENDIF
  238.   IF .NOT. file_open
  239.     RETURN
  240.   ENDIF
  241.   IF mfilt_desc=' '
  242.     SET FILT TO
  243.   ELSE
  244.     SET FILT TO &mfilt_desc
  245.     GOTO TOP
  246.   ENDIF
  247.   DO browse
  248. ENDIF
  249. RETURN
  250.  
  251.  
  252. *(A) Add new Graph parameter record
  253. PROC gradd
  254.  
  255. GOTO BOTT
  256. STOR STR(VAL(grph_nmbr)+1,4,0) TO Mgrph_nmbr
  257. APPE BLANK
  258. REPL grph_NMBR WITH Mgrph_nmbr
  259. DO grscrn
  260. RETURN
  261.  
  262. *(E)(V) Edit/View Graph parameter record
  263. PROC grscrn
  264.  
  265. PAINT=.T.
  266. @ 1,0 CLEAR
  267. DO setcolor WITH 'BG'
  268. @ 1,1 TO 21,78
  269. DO setcolor WITH 'GR,n/w'
  270. @ 2,20 SAY '** GRAPH PARAMETERS **'
  271. @ 4,4 SAY 'Graph Number' GET grph_nmbr
  272. @ 5,4 SAY 'Graph Title ' GET title
  273. @ 7,4 SAY 'File Name   ' GET file_name
  274. @ 8,4 SAY 'Index Name  ' GET indx_name
  275. @ 9,4 SAY 'Filter      ' GET filt_desc
  276. @ 11,15 SAY 'TITLE          EXPRESSION'
  277. @ 12,4 SAY 'Bar 1 '+CHR(219)+'  ' GET bardesc_1
  278. @ 12,30 GET barexpr_1
  279. @ 13,4 SAY 'Bar 2 '+CHR(176)+'  ' GET bardesc_2
  280. @ 13,30 GET barexpr_2
  281. @ 14,4 SAY 'Bar 3 '+CHR(177)+'  ' GET bardesc_3
  282. @ 14,30 GET barexpr_3
  283. @ 15,4 SAY 'Bar 4 '+CHR(178)+'  ' GET bardesc_4
  284. @ 15,30 GET barexpr_4
  285. @ 17,4 SAY 'Parameter' GET pdesc_1
  286. @ 17,30 GET para_1
  287. @ 19,4 SAY  'Bar Value Increment ' GET bar_incr
  288. @ 19,40 SAY 'Parameter Spacing   ' GET p_space
  289. @ 20,4 SAY 'V = Vertical BAR, H = Horizontal BAR, N = Numeric' GET gtype PICT '!'
  290. DO setcolor WITH 'w,n/w'
  291. IF code='V'
  292.   CLEAR GETS
  293.   STOR ' ' TO anykey
  294.   @ 23,1 SAY 'Type any key to continue ' GET anykey
  295. ENDIF
  296. READ
  297. RETURN
  298.  
  299.  
  300. *(U) Pack graph parameter file
  301. PROC grpack
  302.  
  303. anykey=' '
  304. @ 22,1 SAY 'This selection will remove all records marked for deletion.'
  305. @ 23,1 SAY 'Continue? (Y/N) ' GET anykey PICT '!'
  306. READ
  307. IF anykey<>'Y'
  308.   RETURN
  309. ENDIF
  310. IF .NOT. CLIPPER
  311.   paint=.t.
  312.   CLEAR
  313. ENDIF
  314. SET TALK ON
  315. PACK
  316. IF .NOT. CLIPPER
  317.   WAIT
  318. ENDIF
  319. SET TALK OFF
  320. file_open=.f.
  321. SELE J
  322. USE
  323. RETURN
  324.  
  325. *(O) Print Graph parameter file list
  326. PROC grprint
  327.  
  328. PRIVATE mrecord
  329.  
  330. STOR RECNO() TO mrecord
  331. CLEAR
  332. ? 'Turn on printer and set to top of form.'
  333. WAIT
  334. paint=.T.
  335. SELE graph_it
  336. IF CLIPPER
  337.   REPORT FORM graph_it WHILE pr_ok() TO PRINT
  338. ELSE
  339.   REPORT FORM graph_it TO PRINT
  340. ENDIF
  341. EJECT
  342. GOTO mrecord
  343. RETURN
  344.  
  345.  
  346. *(Z) Open or Close data file
  347. PROC grfopen
  348.  
  349. PRIVATE mfilex,mindexx,anykey,mfile_name,mindx_name,indexon
  350. IF file_open && Close file and return
  351.   SELE J
  352.   USE
  353.   file_open=.f.
  354.   RETURN
  355. ENDIF
  356. ** Check for file existence
  357. @ 22,0 CLEAR TO 23,79
  358. @ 23,1 SAY 'Please wait...'
  359. SELE graph_it
  360. STOR TRIM(file_name)+'.DBF' TO mfilex
  361. IF CLIPPER
  362.   STOR TRIM(indx_name)+'.NTX' TO mindexx
  363. ELSE
  364.   STOR TRIM(indx_name)+'.NDX' TO mindexx
  365. ENDIF
  366. anykey=' '
  367. mfile_name=TRIM(file_name)
  368. mindx_name=TRIM(indx_name)
  369. IF FILE('&mfilex')
  370.   SELE J
  371.   USE &mfile_name
  372. ELSE
  373.   @ 23,1 SAY 'File '+mfilex+' is not in directory. Type any key to continue';
  374.   GET anykey
  375.   READ
  376.   SELE J
  377.   USE
  378.   file_open=.f.
  379.   RETURN
  380. ENDIF
  381. anykey=' '
  382. IF (mindx_name+' ')<>' '
  383.   IF FILE('&mindexx')
  384.     SET INDEX TO &mindx_name
  385.   ELSE
  386.     @ 22,1 SAY 'Index File '+mindexx+' is not in directory.'
  387.     @ 23,1 SAY 'Create new index file?' GET anykey PICT '!'
  388.     READ
  389.     IF anykey='Y'
  390.       indexon=REPL(' ',40)
  391.       @ 23,0 CLEAR TO 23,79
  392.       @ 23,1 SAY 'Index on:' GET indexon
  393.       READ
  394.       INDEX ON &indexon TO &mindx_name
  395.       SET INDEX TO &mindx_name
  396.     ELSE
  397.       SET INDEX TO
  398.     ENDIF
  399.   ENDIF
  400. ENDIF
  401. file_open=.t.
  402. RETURN
  403.  
  404. * Display time
  405. PROC grtime
  406.  
  407. PRIVATE mtime
  408. DO WHILE ikey=0
  409.   DO disptime WITH 0,2
  410.   mtime=TIME()
  411.   DO WHILE mtime=TIME() .AND. ikey=0
  412.     ikey=INKEY()
  413.   ENDDO
  414. ENDDO
  415. CODE=IIF(ikey<32,' ',UPPER(CHR(ikey)))
  416. RETURN
  417.  
  418. PROC disptime
  419.  
  420. PRIVATE x,y,tcorrect,textend
  421. PARAMETERS x,y
  422. tcorrect=0
  423. textend=' am'
  424. IF VAL(SUBSTR(time(),1,2))>11
  425.   tcorrect=12
  426.   textend=' pm'
  427. ENDIF
  428. IF VAL(SUBSTR(time(),1,2))=12
  429.   tcorrect=0
  430. ENDIF
  431. @ X,Y SAY STR(VAL(SUBSTR(time(),1,2))-tcorrect,2,0)+SUBSTR(time(),3,6)+textend
  432. RETURN
  433.  
  434.  
  435. * Browse file
  436. PROC browse
  437.  
  438. PRIVATE brpaint,fld_start,fld_nmbr,c,fld_name,mfld_name,l
  439.  
  440. paint=.T.
  441. IF .NOT. CLIPPER
  442.   BROWSE
  443.   RETURN
  444. ENDIF
  445. CLEAR
  446. SET DELIM OFF
  447. SET INTE ON
  448. DO setcolor WITH 'G'
  449. @ 1,0 TO 4,78 DOUBLE
  450. @ 2,2 SAY '^E ('+CHR(24)+')'
  451. @ 3,2 SAY '^X ('+CHR(25)+')'
  452. @ 2,10 SAY '= Move up one line'
  453. @ 3,10 SAY '= Move down one line'
  454. @ 2,32 TO 3,32
  455. @ 2,33 SAY ' PgUp= Page up'
  456. @ 3,33 SAY ' PgDn= Page down'
  457. @ 2,56 TO 3,56
  458. @ 2,57 SAY 'RET = Finish browse'
  459. DO setcolor WITH 'W,N/W'
  460. brpaint=.T.
  461. fld_start=1
  462. fld_nmbr=fld_start
  463. c=0
  464. DO WHILE fld_nmbr<=FCOUNT()
  465.   STOR FIELD(fld_nmbr) TO fld_name
  466.   @ 5,c SAY fld_name
  467.   DO CASE
  468.     CASE TYPE(fld_name)='C'
  469.       c=c+LEN(&fld_name)+1
  470.     CASE TYPE(fld_name)='M'
  471.       c=c+50
  472.     CASE TYPE(fld_name)='N' .OR. TYPE(fld_name)='D'
  473.       c=c+11
  474.   ENDCASE
  475.   @ 5,c-1 SAY '         '
  476.   fld_nmbr=fld_nmbr+1
  477.   STOR FIELD(fld_nmbr) TO fld_name
  478.   DO CASE
  479.     CASE TYPE(fld_name)='C'
  480.       IF c+LEN(&fld_name)>77
  481.         EXIT
  482.       ENDIF
  483.     CASE TYPE(fld_name)='M'
  484.       IF c+50>77
  485.         EXIT
  486.       ENDIF
  487.   ENDCASE
  488.   IF c+11>77
  489.     EXIT
  490.   ENDIF
  491. ENDDO
  492. Mfld_nmbr=fld_nmbr
  493. DO WHILE .T.
  494.   l=6
  495.   @ l,0 CLEAR
  496.   IF EOF()
  497.     GOTO BOTT
  498.   ENDIF
  499.   STOR RECNO() TO BRSTART
  500.   DO WHILE l<21 .AND. .NOT. EOF()
  501.     c=0
  502.     fld_nmbr=fld_start
  503.     ?
  504.     DO WHILE fld_nmbr<Mfld_nmbr
  505.       STOR FIELD(fld_nmbr) TO fld_name
  506.       IF TYPE(fld_name)='M'
  507.         mfld_name=SUBSTR(&fld_name,1,50)
  508.         ?? mfld_name
  509.       ELSE
  510.         ?? &fld_name
  511.       ENDIF
  512.       ?? ' '
  513.       fld_nmbr=fld_nmbr+1
  514.     ENDDO
  515.     l=l+1
  516.     SKIP
  517.   ENDDO
  518.   GOTO BRSTART
  519.   l=7
  520.   DO WHILE .T.
  521.     STOR FIELD(1) TO fld_name
  522.     ikey=0
  523.     DO WHILE ikey=0
  524.       ikey=INKEY()
  525.       @ l,0 GET &fld_name
  526.       CLEAR GETS
  527.     ENDDO
  528.     @ l,0 SAY &fld_name
  529.     DO CASE
  530.       CASE ikey=24 .AND. .NOT. EOF()
  531.         l=l+1
  532.         SKIP
  533.         IF l>21
  534.           EXIT
  535.         ENDIF
  536.       CASE ikey=13
  537.         CLEAR
  538.         SET DELIM ON
  539.         ikey=0
  540.         RETURN
  541.       CASE ikey=5 .AND. .NOT. BOF()
  542.         l=l-1
  543.         SKIP -1
  544.         IF l<7
  545.           EXIT
  546.         ENDIF
  547.       CASE ikey=18 .AND. .NOT. BOF()
  548.         SKIP -14
  549.         l=l-14
  550.         EXIT
  551.       CASE ikey=3 .AND. .NOT. EOF()
  552.         SKIP 14
  553.         l=l+14
  554.         EXIT
  555.     ENDCASE
  556.   ENDDO
  557. ENDDO
  558.  
  559. * Check for escape key hit to abort print routine
  560. FUNCTION pr_ok 
  561.  
  562. PRIVATE m_request, m_continue
  563. m_continue=.T.
  564. IF INKEY()=27
  565.   m_request=' '
  566.   SET DEVICE TO SCREEN
  567.   @ 24,1 SAY 'Printing paused. Q = Quit, R = Resume ';
  568.    GET m_request PICT '!'
  569.   SET ESCAPE OFF
  570.   READ
  571.   SET ESCAPE ON
  572.   @ 24,0 CLEAR
  573.   DO CASE
  574.     CASE m_request='Q'
  575.       m_continue=.F.
  576.     CASE m_request='R'
  577.       m_continue=.T.
  578.   ENDCASE
  579. ENDIF
  580. RETURN (m_continue)
  581.  
  582.  
  583. * set color attributes
  584. PROC setcolor
  585.  
  586. PARAMETERS colorp
  587.  
  588. IF ISCOLOR()
  589.   SET COLOR TO &colorp
  590. ENDIF
  591. RETURN
  592.  
  593.  
  594. *(J) Draw Graph
  595. PROC grgraph
  596.  
  597. PRIVATE mbarexpr_1,mbarexpr_2,mbar_expr_3,mbarexpr_4
  598. PRIVATE mbar_incr,mpdesc_1,mpara_1,mgtype,mp_space,mtitle
  599. PRIVATE mbardesc_1,mbardesc_2,mbardesc_3,mbardesc_4
  600. PRIVATE mfilt_desc
  601.  
  602. paint=.T.
  603. mtitle=title
  604. mfilt_desc=filt_desc
  605. mbardesc_1=TRIM(bardesc_1)
  606. mbardesc_2=TRIM(bardesc_2)
  607. mbardesc_3=TRIM(bardesc_3)
  608. mbardesc_4=TRIM(bardesc_4)
  609. mbarexpr_1=barexpr_1
  610. mbarexpr_2=barexpr_2
  611. mbarexpr_3=barexpr_3
  612. mbarexpr_4=barexpr_4
  613. mbar_incr=bar_incr
  614. mpdesc_1=TRIM(pdesc_1)
  615. mpara_1=para_1
  616. mgtype=gtype
  617. mp_space=p_space
  618. SELE J
  619. IF .NOT. file_open
  620.   DO grfopen
  621. ENDIF
  622. IF .NOT. file_open
  623.   RETURN
  624. ENDIF
  625. IF mfilt_desc=' '
  626.   SET FILT TO
  627. ELSE
  628.   SET FILT TO &mfilt_desc
  629.   GOTO TOP
  630. ENDIF
  631. DO grphdraw
  632. RETURN
  633.  
  634. **  Draw graphs using parameters in GRAPH_IT.DBF file
  635. PROC grphdrw
  636.  
  637. PARAMETERS mgrph_nmbr,file_open
  638.  
  639. PUBLIC CLIPPER
  640. PRIVATE fname,alias
  641.  
  642. IF file_open
  643.   IF CLIPPER
  644.     fname=ALIAS()
  645.     alias=fname
  646.   ELSE
  647.     DO alias
  648.     fname=alias
  649.   ENDIF
  650.   IF LEN(alias)=0
  651.     RELE alias
  652.     RETURN
  653.   ENDIF
  654. ENDIF
  655. RELE alias
  656. SELE I
  657. USE graph_it
  658. LOCA FOR grph_nmbr=mgrph_nmbr
  659. IF EOF()
  660.   IF file_open
  661.     SELE &fname
  662.   ENDIF
  663.   RETURN
  664. ENDIF
  665. mtitle=title
  666. mfilt_desc=filt_desc
  667. mbardesc_1=TRIM(bardesc_1)
  668. mbardesc_2=TRIM(bardesc_2)
  669. mbardesc_3=TRIM(bardesc_3)
  670. mbardesc_4=TRIM(bardesc_4)
  671. mbarexpr_1=barexpr_1
  672. mbarexpr_2=barexpr_2
  673. mbarexpr_3=barexpr_3
  674. mbarexpr_4=barexpr_4
  675. mbar_incr=bar_incr
  676. mpdesc_1=TRIM(pdesc_1)
  677. mpara_1=para_1
  678. mgtype=gtype
  679. mp_space=p_space
  680. IF file_open
  681.   SELE &fname
  682. ELSE
  683.   SELE J
  684.   DO grfopen
  685.   IF .NOT. file_open
  686.     RETURN
  687.   ENDIF
  688.   fname='J'
  689.   IF mfilt_desc=' '
  690.     SET FILT TO
  691.   ELSE
  692.     SET FILT TO &mfilt_desc
  693.     GOTO TOP
  694.   ENDIF
  695. ENDIF
  696. DO grphdraw
  697. SELE graph_it
  698. USE
  699. SELE &fname
  700. RETURN
  701.  
  702. ***************
  703. * Proc   : ALIAS
  704. * Author : Roger J. Donnay
  705. * Date   : June 23, 1987
  706. * Notes  : Returns the alias of the database file in the 
  707. *          current workspace.  Needed only in dBaseIII
  708. *          Similar to ALIAS() function in clipper
  709. * Syntax : DO alias 
  710. *          The alias will be returned in a variable named ALIAS
  711. ***************
  712.  
  713. PROC alias
  714.  
  715. PRIVATE b,c
  716. PUBLIC alias
  717. alias=DBF()
  718. IF LEN(alias)=0
  719.   RETURN
  720. ENDIF
  721. b=AT('.',alias)
  722. alias=SUBSTR(alias,1,b-1)
  723. DO WHILE .t.
  724.   c=AT(':',alias)
  725.   IF c=0
  726.     EXIT
  727.   ENDIF
  728.   alias=SUBSTR(alias,c+1,LEN(alias)-c)
  729. ENDDO
  730. DO WHILE .t.
  731.   c=AT('\',alias)
  732.   IF c=0
  733.     EXIT
  734.   ENDIF
  735.   alias=SUBSTR(alias,c+1,LEN(alias)-c)
  736. ENDDO
  737. RETURN
  738.  
  739. ** This is here so the Clipper linker will not crash
  740. FUNCTION DBF 
  741. RETURN 0
  742.  
  743.  
  744. ****************************************
  745. * This section of procedures draws the graph on the screen.  Your datafile
  746. * must be in the current selected area.  The graph will start at the
  747. * current record.
  748. *
  749. * The following group of procedures can be placed in a seperate
  750. * procedure file and the procedure "grphdraw" may be called from your
  751. * dBaseIII or Clipper program to graph your database, starting at the
  752. * current record.
  753. *
  754. * You need the following procedures:  
  755. *
  756. *   grphdraw  -  main loop
  757. *   grphdver  -  draw vertical bar graph
  758. *   grphdhor  -  draw horizontal bar graph
  759. *   grphdnum  -  draw numeric graph
  760. *
  761. *
  762. * Enter with the following data variables:
  763. *
  764. * mtitle - String up to 40 chars (title of graph)
  765. * mbardesc_1  -  String, up to 14 chars (description of Bar 1)
  766. * mbardesc_2  -  String, up to 14 chars (description of Bar 2)
  767. * mbardesc_3  -  String, up to 14 chars (description of Bar 3)
  768. * mbardesc_4  -  String, up to 14 chars (description of Bar 4)
  769. * mbarexpr_1  -  String, any length (any dbaseIII expression for Bar 1)
  770. * mbarexpr_2  -  String, any length (any dbaseIII expression for Bar 2)
  771. * mbarexpr_3  -  String, any length (any dbaseIII expression for Bar 3)
  772. * mbarexpr_4  -  String, any length (any dbaseIII expression for Bar 4)
  773. * mbar_incr   -  Numeric, (incremental value of graph)
  774. * mpdesc_1    -  String, up to 14 chars (description of graphed data parameter)
  775. * mpara_1     -  String, any length (any dbaseIII expression for parameter)
  776. * mgtype      -  String, 1 char (V=Vertical, H=Horizontal, N=Numeric)
  777. * mp_space    -  Numeric, (spacing between parameters on graph)
  778. *
  779. *****************************************
  780.  
  781. PROC grphdraw
  782.  
  783. PRIVATE startrec,endrec,grpaint,mrecord,vincr,x
  784. PRIVATE l,c,p1,p2,p3,p4,vc,top,bott
  785.  
  786. CLEAR
  787. grpaint=.T.
  788. STOR ' ' TO anykey
  789. STOR 0 TO endrec
  790. DO WHILE .t.
  791.   STOR RECNO() TO startrec
  792.   IF mgtype='V' .AND. anykey<>'N'
  793.     DO grphdver
  794.   ENDIF
  795.   IF mgtype='H' .AND. anykey<>'N'
  796.     DO grphdhor
  797.   ENDIF
  798.   IF mgtype='N' .OR. anykey='N'
  799.     DO grphdnum
  800.     IF anykey='N'
  801.       grpaint=.T.
  802.     ENDIF
  803.   ENDIF
  804.   STOR RECNO() TO endrec
  805.   STOR ' ' TO anykey
  806.   @ 24,1 SAY;
  807.   '<CR> = Cont., Q = QUIT, N = Numeric Chart, R = Goto new START record ';
  808.    GET anykey PICT '!'
  809.   READ
  810.   IF anykey='N'
  811.     GOTO startrec
  812.     grpaint=.T.
  813.   ENDIF
  814.   IF anykey='R'
  815.     @ 24,0 CLEAR
  816.     STOR 0 TO mrecord
  817.     @ 24,1 SAY 'Enter Record Number or <CR> to browse file' GET mrecord
  818.     READ
  819.     IF mrecord<1
  820.       grpaint=.T.
  821.       DO browse
  822.     ELSE
  823.       GOTO mrecord
  824.     ENDIF
  825.   ENDIF
  826.   IF anykey='Q'
  827.     RETURN
  828.   ENDIF
  829. ENDDO
  830.  
  831. * Draw vertical bar graph
  832. PROC grphdver
  833.  
  834. IF grpaint
  835.   CLEAR
  836. ENDIF
  837. DO setcolor WITH 'BG'
  838. @ 5,8 CLEAR TO 20,77
  839. @ 5,8 TO 5,77
  840. @ 22,10 CLEAR TO 23,79
  841. @ 24,0 CLEAR
  842. IF grpaint
  843.   @ 1,7 TO 21,78
  844.   @ 3,8 TO 3,77
  845.   DO setcolor WITH 'w'
  846.   @ 21,7 SAY CHR(192)
  847.   @ 2,10 SAY mtitle
  848.   @ 4,10 SAY CHR(219)+' '+mbardesc_1
  849.   @ 4,28 SAY CHR(176)+' '+mbardesc_2
  850.   @ 4,46 SAY CHR(177)+' '+mbardesc_3
  851.   @ 4,64 SAY CHR(178)+' '+mbardesc_4
  852.   DO setcolor WITH 'w'
  853.   vert=19
  854.   vincr=mbar_incr
  855.   DO WHILE vert>3
  856.     DO CASE
  857.       CASE vincr<1000
  858.         @ vert,1 SAY vincr PICT '9999'
  859.       CASE vincr>=1000 .AND. vincr<1000000
  860.         x=vincr/1000
  861.         @ vert,0 SAY x PICT '999.9'
  862.         @ vert,5 SAY 'K'
  863.       CASE vincr>1000000
  864.         x=vincr/1000000
  865.         @ vert,0 SAY x PICT '999.9'
  866.         @ vert,5 SAY 'M'
  867.     ENDCASE
  868.     @ vert,7 SAY CHR(180)
  869.     vincr=vincr+mbar_incr
  870.     vert=vert-2
  871.   ENDDO
  872.   grpaint=.F.
  873. ENDIF
  874. horiz=11
  875. DO setcolor WITH 'w'
  876. @ 22,0 SAY mpdesc_1
  877. l=23
  878. DO WHILE horiz<79-mp_space .AND. .NOT. EOF()
  879.   IF l=23
  880.     l=22
  881.   ELSE
  882.     l=23
  883.   ENDIF
  884.   c=1
  885.   @ l,horiz-1 SAY ' '
  886.   @ l,horiz SAY &mpara_1
  887.   IF mbarexpr_1<>' '
  888.     vert=20
  889.     vc=mbar_incr/2
  890.     p1=&mbarexpr_1
  891.     DO WHILE vc<p1 .AND. vert>5
  892.       @ vert,horiz+c SAY CHR(219)
  893.       vc=vc+mbar_incr/2
  894.       vert=vert-1
  895.     ENDDO
  896.     IF vert=5
  897.       @ vert,horiz+c SAY '^'
  898.     ENDIF
  899.     c=c+1
  900.   ENDIF
  901.   IF mbarexpr_2<>' '
  902.     vert=20
  903.     vc=mbar_incr/2
  904.     p2=&mbarexpr_2
  905.     DO WHILE vc<p2 .AND. vert>5
  906.       @ vert,horiz+c SAY CHR(176)
  907.       vc=vc+mbar_incr/2
  908.       vert=vert-1
  909.     ENDDO
  910.     IF vert=5
  911.       @ vert,horiz+c SAY '^'
  912.     ENDIF
  913.     c=c+1
  914.   ENDIF
  915.   IF mbarexpr_3<>' '
  916.     vert=20
  917.     vc=mbar_incr/2
  918.     p3=&mbarexpr_3
  919.     DO WHILE vc<p3 .AND. vert>5
  920.       @ vert,horiz+c SAY CHR(177)
  921.       vc=vc+mbar_incr/2
  922.       vert=vert-1
  923.     ENDDO
  924.     IF vert=5
  925.       @ vert,horiz+c SAY '^'
  926.     ENDIF
  927.     c=c+1
  928.   ENDIF
  929.   IF mbarexpr_4<>' '
  930.     vert=20
  931.     vc=mbar_incr/2
  932.     p4=&mbarexpr_4
  933.     DO WHILE vc<p4 .AND. vert>5
  934.       @ vert,horiz+c SAY CHR(178)
  935.       vc=vc+mbar_incr/2
  936.       vert=vert-1
  937.     ENDDO
  938.     IF vert=5
  939.       @ vert,horiz+c SAY '^'
  940.     ENDIF
  941.   ENDIF
  942.   SKIP
  943.   horiz=horiz+mp_space
  944. ENDDO
  945. RETURN
  946.  
  947. * Draw horizontal bar graph
  948. PROC grphdhor
  949.  
  950. IF grpaint
  951.   CLEAR
  952. ENDIF
  953. DO setcolor WITH 'bg'
  954. @ 5,16 CLEAR TO 21,77
  955. @ 5,16 TO 5,77
  956. @ 0,0 CLEAR TO 21,14
  957. IF grpaint
  958.   @ 1,15 TO 22,78
  959.   @ 3,16 TO 3,77
  960.   DO setcolor WITH 'w'
  961.   @ 22,15 SAY CHR(192)
  962.   @ 2,16 SAY mtitle
  963.   @ 4,16 SAY CHR(219)+' '+mbardesc_1
  964.   @ 4,31 SAY CHR(176)+' '+mbardesc_2
  965.   @ 4,46 SAY CHR(177)+' '+mbardesc_3
  966.   @ 4,61 SAY CHR(178)+' '+mbardesc_4
  967.   DO setcolor WITH 'w'
  968.   hor=16
  969.   vincr=mbar_incr 
  970.   DO CASE
  971.     CASE mbar_incr*12<10000
  972.       x=1
  973.     CASE mbar_incr*12>=10000 .AND. mbar_incr*12<10000000
  974.       x=1000
  975.       @ 24,60 SAY 'Thousands (K)'
  976.     CASE mbar_incr*12>=10000000
  977.       x=1000000
  978.       @ 24,60 SAY 'Millions (M)'
  979.   ENDCASE
  980.   DO WHILE hor<75
  981.     @ 23,hor SAY vincr/x PICT '9999.9'
  982.     vincr=vincr+mbar_incr
  983.     hor=hor+5
  984.   ENDDO
  985.   @ 22,0 SAY mpdesc_1
  986.   grpaint=.F.
  987. ENDIF
  988. vert=21
  989. top=6
  990. DO setcolor WITH 'w'
  991. DO WHILE vert>top .AND. .NOT. EOF()
  992.   @ vert,1 SAY &mpara_1
  993.   IF mbarexpr_1<>' '
  994.     p1=&mbarexpr_1
  995.     IF p1<mbar_incr*12 
  996.       IF p1>0
  997.         @ vert,16 SAY REPL(CHR(219),p1*5/mbar_incr-1)
  998.       ENDIF
  999.     ELSE
  1000.       @ vert,16 SAY REPL(CHR(219),12*5)+'>'
  1001.     ENDIF
  1002.     vert=vert-1
  1003.   ENDIF
  1004.   IF mbarexpr_2<>' '
  1005.     p2=&mbarexpr_2
  1006.     IF p2<mbar_incr*12
  1007.       IF p2>0
  1008.         @ vert,16 SAY REPL(CHR(176),p2*5/mbar_incr-1)
  1009.       ENDIF
  1010.     ELSE
  1011.       @ vert,16 SAY REPL(CHR(176),12*5)+'>'
  1012.     ENDIF
  1013.     vert=vert-1
  1014.   ENDIF
  1015.   IF mbarexpr_3<>' '
  1016.     p3=&mbarexpr_3
  1017.     IF p3<mbar_incr*12
  1018.       IF p3>0
  1019.         @ vert,16 SAY REPL(CHR(177),p3*5/mbar_incr-1)
  1020.       ENDIF
  1021.     ELSE
  1022.       @ vert,16 SAY REPL(CHR(177),12*5)+'>'
  1023.     ENDIF
  1024.     vert=vert-1
  1025.   ENDIF
  1026.   IF mbarexpr_4<>' '
  1027.     p4=&mbarexpr_4
  1028.     IF p4<mbar_incr*12
  1029.       IF p4>0
  1030.         @ vert,16 SAY REPL(CHR(178),p4*5/mbar_incr-1)
  1031.       ENDIF
  1032.     ELSE
  1033.       @ vert,16 SAY REPL(CHR(178),12*5)+'>'
  1034.     ENDIF
  1035.     vert=vert-1
  1036.   ENDIF
  1037.   vert=vert-mp_space
  1038.   SKIP
  1039. ENDDO
  1040. RETURN
  1041.  
  1042. * Draw Numeric chart
  1043. PROC grphdnum
  1044.  
  1045. @ 5,2 CLEAR TO 21,77
  1046. IF grpaint
  1047.   CLEAR
  1048.   DO setcolor WITH 'bg'
  1049.   @ 1,1 TO 22,78
  1050.   @ 3,2 TO 3,77
  1051.   DO setcolor WITH 'w'
  1052.   @ 2,4 SAY mtitle
  1053.   @ 4,4 SAY mpdesc_1
  1054.   @ 4,20 SAY mbardesc_1
  1055.   @ 4,35 SAY mbardesc_2
  1056.   @ 4,50 SAY mbardesc_3
  1057.   @ 4,65 SAY mbardesc_4
  1058.   grpaint=.F.
  1059. ENDIF
  1060. DO setcolor WITH 'w'
  1061. vert=6
  1062. bot=22
  1063. DO WHILE vert<bot .AND. .NOT. EOF() .AND. RECNO()<>endrec
  1064.   @ vert,2 SAY TRIM(&mpara_1)
  1065.   IF mbarexpr_1<>' '
  1066.     p1=&mbarexpr_1
  1067.     @ vert,22 SAY p1 PICT '9999999.999'
  1068.   ENDIF
  1069.   IF mbarexpr_2<>' '
  1070.     p2=&mbarexpr_2
  1071.     @ vert,37 SAY p2 PICT '9999999.999'
  1072.   ENDIF
  1073.   IF mbarexpr_3<>' '
  1074.     p3=&mbarexpr_3
  1075.     @ vert,52 SAY p3 PICT '9999999.999'
  1076.   ENDIF
  1077.   IF mbarexpr_4<>' '
  1078.     p4=&mbarexpr_4
  1079.     @ vert,67 SAY p4 PICT '9999999.999'
  1080.   ENDIF
  1081.   vert=vert+1
  1082.   SKIP
  1083. ENDDO
  1084. RETURN
  1085.  
  1086. *************************
  1087. *
  1088. * End of graphing procedures
  1089. *
  1090. *************************
  1091.